package com.hsh.txt
{
	import adobe.utils.CustomActions;
	import com.hsh.acte.Actif;
	import com.hsh.graph.Visuel;
	import flash.display.DisplayObjectContainer;
	import flash.text.TextField;
	import flash.text.TextFormat;
	
	/**
	 * Champ de texte simple
	 * @author Jean-Marie@home
	 */
	public class Etiquette extends Actif
	{
		protected var _field:TextField = new TextField;
		protected var _run:Run = new Run();
		protected var _mg:Marge = new Marge();
		/**
		 * Champ de texte simpe
		 * @param	cible	support 
		 * @param	x	gauche	
		 * @param	y	haut
		 * @param	l	largeur
		 * @param	h	hauteur
		 * @param	txt	texte affiché (Calibri, 14, noir, centré par défaut)
		 */
		public function Etiquette(cible:*, x:Number, y:Number, l:Number = 0, h:Number = 0, txt:String="")
		{
			super(_field, txt);
			
			if (cible is DisplayObjectContainer) 
			{
				sur(cible);
			} else if (cible is Visuel)
			{
				Visuel(cible).adopter(this);
			}
			cadrer(x, y, l, h);
			_field.selectable = _field.mouseEnabled = false;
			texte  = txt;
		}
		
		override public function actualiser():void 
		{
			_field.width = _largeur;
			_field.height = _hauteur;
		}
		
		/**
		 * Définit la position et la taille du visuel
		 * @param	x	gauche du visuel
		 * @param	y	haut du visuel
		 * @param	l	largeur du visuel
		 * @param	h	hauteur du visuel
		 */
		public function cadrer(x:Number, y:Number, l:Number, h:Number):void
		{
			placer(x, y);
			tailler(l, h);
		}
		
		/**
		 * Définition des marges
		 * @param	g	gauche
		 * @param	d	droite
		 * @param	indent	indentation de paragraphe
		 * @param	inlgn	espace entre les lignes
		 * @param	inspc	espace entre les caractères
		 */
		public function emarger(g:int, d:int, h:int, b:int, indent:Number, inlgn:Number, spc:Number):void
		{
			mg.emarger(g, d, h, b, indent, inlgn, spc);
			texte = _run.texte;
		}
		
		/**
		 * Définition du format du texte
		 * @param	p	police
		 * @param	t	taille
		 * @param	c	couleur
		 * @param	g	gras
		 * @param	i	ital
		 * @param	s	souligné
		 */
		public function formater(p:String, t:Number, c:uint, g:Boolean = false, i:Boolean = false, s:Boolean = false):void
		{
			_run.formater(p, t, c);
			_run.decorer(g, i, s);
			texte = _run.texte;
		}
		
		/**
		 * Définition de la décoration du texte
		 * @param	g	gras
		 * @param	i	ital
		 * @param	s	souligné
		 */
		public function decorer(g:Boolean = false, i:Boolean = false, s:Boolean = false):void
		{
			_run.decorer(g, i, s);
			texte = _run.texte;
		}
		
		/**
		 * Format du texte
		 */	
		public function get fmt():TextFormat 
		{
			return _run.fmt;
		}
		
		public function set fmt(value:TextFormat):void 
		{
			_run.fmt = value;
			texte = _run.texte;
		}
		
		/**
		 * Texte affiché
		 */		
		public function get texte():String 
		{
			return _run.texte;
		}
		
		public function set texte(value:String):void
		{
			_field.defaultTextFormat = _run.fmt;
			_field.text = _run.texte = value;
		}
		
		/**
		 * Marges 
		 */
		public function get mg():Marge 
		{
			return _mg;
		}
	}
}